package com.shankungfu.util;

import java.io.UnsupportedEncodingException;

import org.apache.http.HttpEntity;
import org.apache.http.client.HttpResponseException;
import org.apache.http.entity.StringEntity;
import org.apache.http.protocol.HTTP;

import com.loopj.android.http.AsyncHttpClient;
import com.loopj.android.http.AsyncHttpResponseHandler;
import com.loopj.android.http.PersistentCookieStore;
import com.loopj.android.http.RequestParams;
import com.shankungfu.GlobleConstant;
import com.shankungfu.MainApplication;

/**
 * 请求网络的公用类
 * 
 * @author WangQing 2013-8-12
 */
public class WebService {
	private static AsyncHttpClient httpClient;

	/** 设置超时时长 */
	private static final int TIMEOUT = 10 * 1000;

	/**
	 * 实例化一个网络请求对象 WangQing 2013-8-12 AsyncHttpClient
	 * 
	 * @return
	 */
	public AsyncHttpClient getInstence() {
		if (httpClient == null) {
			httpClient = new AsyncHttpClient();
			PersistentCookieStore cookieStore = new PersistentCookieStore(MainApplication.context);
			httpClient.setCookieStore(cookieStore);
			// 在Header中添加 一些，设备需要的信息
			// httpClient.addHeader("", "");
			httpClient.setTimeout(TIMEOUT);
		}
		return httpClient;
	}

	/**
	 * 通用请求网络的方法 WangQing 2013-8-12 void
	 * 
	 * @param url
	 *            请求服务器的接口地址，不需要主机域名，eg: http://www.baidu.com/index.jsp, 只需要传入
	 *            /index.jsp 即可
	 * @param bodyContent
	 *            发送给服务器的JSON串
	 * @param responseHandler
	 *            处理回调
	 */
	public void request(String url, RequestParams params,
			AsyncHttpResponseHandler responseHandler) {
		if (PhoneUtils.isNetworkAvailable(MainApplication.context)) {
				getInstence();
				PersistentCookieStore myCookieStore = new PersistentCookieStore(MainApplication.context);  
				httpClient.setCookieStore(myCookieStore);
				addHttpClientRASHead(responseHandler);
				params.add("app_info", "shankungfu");
				/* 这里使用的地址是 没有包含主机IP，注意这里面的参数 */
				httpClient.post(getUrl(url), params, responseHandler);
		} else {
			//表示网络被禁止
			responseHandler.onFailure(new HttpResponseException(9999, "Network is Forbid 2G/3G,Wifi"), "Network is Forbid 2G/3G,Wifi");
			TestUtils.logE("没有网络，不请求数据！");
		}
	}
	
	/**
     * Get 请求，获取服务器资源
     * @param url
     *            请求服务器的接口地址，不需要主机域名，eg: http://www.baidu.com/index.jsp, 只需要传入
     *            /index.jsp 即可
     * @param bodyContent
     *            发送给服务器的JSON串
     * @param responseHandler
     *            处理回调
     */
    public void requestGet(String url, AsyncHttpResponseHandler responseHandler) {
        if (PhoneUtils.isNetworkAvailable(MainApplication.context)) {
        	getInstence();
            httpClient.get(getUrl(url), responseHandler);
        } else {
        	//表示网络被禁止
            responseHandler.onFailure(new HttpResponseException(9999, "Network is Forbid 2G/3G,Wifi"), "Network is Forbid 2G/3G,Wifi");
            TestUtils.logE("没有网络，不请求数据！");
        }
    }


	/**
	 * 添加加密的头信息 WangQing 2013-8-28 void
	 */
	private static void addHttpClientRASHead(AsyncHttpResponseHandler responseHandler) {
		httpClient.addHeader("v", "1.1");
	}

	/**
	 * 获取请求服务器的完整地址 WangQing 2013-8-12 String
	 * 
	 * @param url
	 *            接口的名字
	 * @return 一个完整的地址
	 */
	private static String getUrl(String url) {
		return GlobleConstant.BaseURL + url;
	}
}
